 | | PROGRAMACIÓN RELACIONAL |
“La motivación más importante en el trabajo de investigación que culminó en el modelo relacional
fue el objetivo de trazar una frontera clara y nítida
entre los aspectos lógico y físico de la gestión de
base de datos” (Edgar Frank Codd)
El Paradigma Relacional
El concepto de relación
El modelo relacional, desarrollado por Edgar Frank Codd [1970], se basa en elementos llamados “relaciones”. Una relación es una tabla bidimensional. La dimensión horizontal corresponde a diferentes entidades. La dimensión vertical corresponde a un conjunto de atributos de esas entidades. Por ejemplo, la relación Empleados, que corresponde a un conjunto de empleados de una empresa expresada en forma de tabla, en donde las filas son los empleados, y las columnas son atributos de esos empleados:
Formalmente, una relación R definida sobre los atributos A1, ... , Am de una cierta clase de entidades es un subconjunto del producto cartesiano de los dominios de esos atributos.
en donde Dom(Ai) es el conjunto de posibles valores del atributo Ai.
Esta relación se puede representar como la tabla bidimensional genérica:
Entidad | Atributos
|
A1 | ... | Am
|
1 | V11 | ... | V1m
|
... | ... | ... | ...
|
n | Vn1 | ... | Vnm
|
siendo:
Ai = atributo i.
Vij = valor en la entidad i del atributo j.
n = cardinalidad de la relación (número de filas o tuplas).
m = grado de la relación (número de atributos).
Una relación es, pues, un conjunto de tuplas.
El orden de las tuplas en una relación es irrelevante, puesto que cada fila corresponde a una entidad diferente. También es irrelevante el orden de las columnas, puesto que cada una lleva asociada el nombre del atributo correspondiente.
En una relación, un atributo clave o primario (o, simplemente, clave) es un atributo cuyo valor es único para cada entidad. En el caso de la relación Empleados, la clave es Empleado. La clave de una relación también podría ser una concatenación de atributos (se habla, en este caso, de una clave compuesta o superclave).
Un conjunto de relaciones (tablas), interrelacionadas a través de atributos comunes, constituye una base de datos relacional (BDR). Por ejemplo, además de la tabla anterior (Empleados), podría existir otra tabla de Ciudades con diferentes atributos (Población, etc.). Ambas tablas quedarían implícitamente enlazadas a través del atributo común Ciudad. Por ejemplo,
Ciudad | Población (millones)
|
Madrid | 5
|
Barcelona | 3
|
Valencia | 2
|
Sevilla | 1
|
Obsérvese que en esta tabla no aparece Alicante (que sí aparecía en la tabla Empleados), pero aparece Sevilla.
Un atributo de una relación que no es clave en una relación puede ser clave de otra. Por ejemplo, el atributo Ciudad no es clave de la relación Empleados, pero es clave en la relación Ciudades. Se dice que Ciudad es una clave ajena (foreign) en Empleados.
Un valor Null (nulo) significa que el valor es desconocido o que no existe. Todas las operaciones que involucren a Null son falsas por definición.
Un valor es atómico si no puede subdividirse en valores más pequeños. Por ejemplo, la edad de una persona en años es un valor atómico. El concepto de atomicidad es relativo, pues un valor puede considerarse atómico o compuesto, según el propósito.
Álgebra relacional
El modelo relacional se basa en un conjunto de operaciones básicas, que constituyen la llamada “álgebra relacional”. Se trata de un conjunto de operaciones que actúan sobre relaciones y que producen una relación como resultado. Las operaciones básicas son 5:
- 3 operaciones diádicas: dos de la teoría de conjuntos (unión y diferencia) y una variante del producto cartesiano.
- 2 operaciones monádicas (selección y proyección).
- Unión de dos relaciones R1 y R2.
R1∪R2 = conjunto de tuplas que pertenecen a R1, a R, o a ambas.
Las relaciones R1 y R2 deben ser compatibles, es decir, deben estar definidas sobre el mismo conjunto de atributos.
- Diferencia de dos relaciones R1 y R2.
R1 − R2 = conjunto de tuplas de R1 que no pertenecen a R2.
Como en el caso anterior, las relaciones deben ser compatibles.
- Producto cartesiano de dos relaciones R1 (de grado m1) y R2 (de grado m2).
R1×R2 = conjunto de todas las posibles tuplas en las que los m1 primeros elementos constituyen una tupla de R1 y los m2 últimos una tupla de R2. Es decir, se concatenan cada una de las filas de R1 con cada una de las filas de R2. La nueva relación es de grado m1+m2 y de cardinalidad m1×m2.
Esta definición es una variante del producto cartesiano clásico.
- Proyección de una relación R.
Es una selección de columnas de la tabla.
Si A es el conjunto de los atributos sobre la que está definida la relación R y B⊆A es un subconjunto de A (una selección de columnas), ΠB(R) es otra relación con las mismas tuplas que R, pero considerando sólo los atributos especificados en B y eliminando las tuplas duplicadas.
Por ejemplo,
Π{Nombre, Apellido1}(Empleados)
produce una nueva relación con solo las columnas correspondientes a los atributos especificados (Nombre y Apellido1) y eliminando las tuplas duplicadas.
Nombre | Apellido1
|
Juan | Pérez
|
Luis | Fernández
|
Pedro | Ruiz
|
Ramón | Ruiz
|
- Selección de una relación R.
Es otra relación en la que se seleccionan las tuplas de R que cumplan un criterio de selección F. La notación es σF(R).
El criterio de selección F se define mediante una fórmula construida con operandos (nombres de atributos o constantes), operadores de comparación (>, <, etc.) y operadores lógicos clásicos (o, y, no: ∨, ∧, ¬).
Por ejemplo,
σApellido1=Ruiz(Empleados)
produce una relación de dos filas:
Otro ejemplo, sería σ(Apellido1=Ruiz ∧ Ciudad=Barcelona)(Empleados) que produciría la relación vacía (el conjunto vacío).
Se demuestra que este conjunto de operaciones básicas es completo [Codd, 1972], pudiéndose combinar estas operaciones para construir operaciones derivadas.
Operaciones derivadas
Con el objeto de facilitar la especificación de las expresiones del álgebra relacional, se definen 7 operaciones derivadas adicionales [Korth & Silberschatz, 1993], (que junto con las 5 básicas, dan un total de 12 operaciones):
- Intersección de dos relaciones R1 y R2.
Las relaciones R1 y R2 deben ser compatibles. La intersección equivale a la operación definida en teoría de conjuntos. Se define a partir de la operación básica diferencia:
- Unión natural (natural join) de dos relaciones R1 y R1, simbolizado por R1 |×| R2).
Es una concatenación a nivel columnas basada en valores iguales en columnas comunes. Tiene la forma σF(R1×R2) en donde F es una fórmula que indica esos valores iguales en columnas comunes.
Por ejemplo, la unión natural de Empleados |×| Ciudades produce la tabla siguiente:
Obsérvese que el empleado E004 no aparece porque Alicante no se encuentra en Ciudades.
- Unión exterior (Outer Join).
Es una extensión de la unión natural que evita la pérdida de información. A los valores no existentes se les asigna el valor Null (nulo). Existen tres tipos:
- R1 ]×| R2 (unión exterior por la izquierda).
Se tienen en cuenta las filas del primer operando.
- R1 |×[ R2 (unión exterior por la derecha).
Se tienen en cuenta las filas del segundo operando.
- R1 ]×[ R2 (unión exterior completa).
Se tienen en cuenta las filas de ambos operandos.
En el caso de Empleados y Ciudades, tenemos:
- Empleados ]×| Ciudades:
- Empleados |×[ Ciudades:
- Empleados ]×[ Ciudades:
- División de dos relaciones R1 y R2.
Para realizar la operación, se deben cumplir dos condiciones:
- grado(R1) > grado(R2).
- El conjunto de atributos C de R2, A(R2), debe estar incluido en los atributos de R1, A(R1), es decir, A(R2) ⊂ A(R1).
R1÷R2 se define a partir de las operaciones de producto cartesiano, diferencia y proyección. Su definición formal es:
X1 = ΠC(R1)
X2 = ΠC(R2×X1 − R1)
R1÷R2 = X1 − X2
R1÷R2 define una nueva relación sobre el subconjunto A(R1)−A(R2) de atributos de R1. Contiene los valores de estos atributos que en las tuplas de R1 están combinadas con cada una de las tuplas de R2.
Por ejemplo, Empleados÷Ciudades produce una relación en la que no aparece la columna Ciudad, ni tampoco aparece el empleado E004 porque Alicante no aparece en la tabla de Ciudades.
- Asignación.
Se da un nombre a una expresión relacional del álgebra relacional:
El nombre se usa en subsiguientes expresiones relacionales. Por ejemplo, T ← ΠB(R1−R2)
- Renombrar.
Se expresa mediante ρX(A1,...,An)(E) e indica renombrar la expresión relacional E como X, y renombrar también los atributos como A1, ..., An.
- Actualización.
Permite actualizar un valor de una tupla de una relación R: σF(R) ← E, en donde E es una expresión relacional.
Con estas operaciones adicionales tenemos un verdadero lenguaje procedimental. Por ejemplo, para añadir y eliminar una expresión relacional E a la relación R, se realiza respectivamente mediante
El lenguaje SQL
SQL (Structured Query Language) es el lenguaje estándar de acceso a las bases de datos relacionales. Se trata de un lenguaje de alto nivel de cuarta generación (4GL), de tipo declarativo (no procedimental), simple de utilizar, basado en el álgebra relacional.
SQL tiene también cuatro operaciones básicas: INSERT, SELECT, UPDATE y DELETE, para insertar, seleccionar, actualizar y eliminar filas, respectivamente. La forma de la sentencia de consulta es
- En A se especifican los nombres de los atributos a seleccionar.
- En R se especifica la tabla (relación) a usar.
- En C se especifica el criterio de selección de tuplas.
El resultado es una subtabla, en el que se han seleccionado filas y columnas.
El SQL puede ser interactivo o no interactivo. El SQL interactivo es adecuado para definir la estructura de una base de datos, realizar consultas y crear prototipos. El SQL no interactivo es un SQL embebido en un lenguaje de programación, y puede ser estático o dinámico. En el dinámico pueden utilizarse variables.
En nuestro ejemplo de Empleados:
SELECT Empleado, Ciudad FROM Empleados WHERE Apellido1=Ruiz
El resultado es:
Empleado | Ciudad
|
E003 | Valencia
|
E004 | Alicante
|
Bases de datos multidimensionales
Las relaciones (tablas) son bidimensionales, pues relacionan dos dimensiones: filas (entidades) con columnas (atributos de esas entidades). Pero pueden existir relaciones de más de dos dimensiones. Por ejemplo, las ventas de productos fabricados por una empresa, con los atributos de: producto, zona y año de venta. En este caso no tenemos una tabla bidimensional, sino una tabla de tres dimensiones (o cubo), siendo las dimensiones: Producto, Zona y Año.
Cada dimensión tiene una clave identificativa. En el caso de la tabla Empleados (2D), las claves identificativas son Empleado y Atributo. En el caso de la tabla de ventas de productos (3D), las claves son Producto, Zona y Año. Si consideramos el número de trimestre del año (un valor entre 1 y 4), tendríamos 4 dimensiones (un hipercubo): Producto, Zona, Año y Trimestre.
Triggers (Disparadores)
Son procedimientos que se ejecutan cuando ocurre un evento previamente especificado. Los eventos son las operaciones de inserción (INSERT), eliminación (DELETE) y actualización (UPDATE) de filas. Un trigger se puede ejecutar antes o después de que se modifiquen los datos.
Los triggers se usan para:
- Implementar reglas de negocio. Una regla de negocio es una restricción, requerimiento, necesidad o actividad especial que debe ser verificada en las operaciones mencionadas de la base de datos.
- Prevenir errores en los datos, sincronizar tablas, modificar valores, etc.
- Verificar la integridad referencial: verificar que una entidad se relaciona siempre con otras entidades válidas de la base de datos.
OLAP (Online Analytical Processing)
Es una técnica de análisis en tiempo real de una base de datos para buscar o descubrir tendencias o patrones ocultos. Es la llamada “minería de datos” (data mining). Puede implicar millones de registros con varios gigabytes de ocupación. En general, las operaciones son solo de lectura.
El sistema permite la exploración selectiva de los datos y responde a consultas de manera suficientemente rápida. Permite a los usuarios extraer datos fácilmente de forma selectiva y verlos desde diferentes puntos de vista. Para facilitar este tipo de análisis, los datos OLAP se almacenan en una base de datos multidimensional de alto rendimiento. OLAP se utiliza en el campo llamado “Business Intelligence”, cuyo objetivo es agilizar la consulta de grandes bases de datos de una empresa para facilitar la toma de decisiones.
Puesto que las aplicaciones OLAP utilizan bases de datos multidimensionales, también se denominan MOLAP (Multidimensional OLAP). Este término se utiliza para diferenciarlo de otros tipos de OLAP como ROLAP (OLAP Relacional) y HOLAP (OLAP híbrido, que combina MOLAP y ROLAP).
En ROLAP, toda la información del cubo, sus datos, sus sumas, etc., se almacenan en una base de datos relacional.
Formas normales
Las formas normales son estructuras organizativas de los datos de una base de datos. La normalización persigue varios proósitos: 1) eliminar datos redundantes; 2) restringir las operaciones no permitidas; 3) asegurar la consistencia para que las dependencias lógicas entre los datos tengan sentido.
- 1NF. Primera forma normal o forma mínima. Cumple las condiciones siguientes:
No hay orden en las filas.
No hay orden en las columnas.
No hay filas con la misma clave.
La intersección fila-columna tiene un solo valor. Algunas interpretaciones admiten el valor nulo (no existente o desconocido).
Un valor no puede ser una tabla.
La clave primaria puede estar formada por una o varias columnas.
Cada columna de la tabla que no pertenece a la clave primaria debe depender de esa clave primaria.
- 2NF. Segunda forma normal. Las columnas de la tabla que no pertenezcan a la clave primaria concatenada pueden depender de una parte de la clave concatenada.
- 3NF. Tercera forma normal. Los datos dependen solo de la clave primaria y no dependen de un atributo secundario (un atributo que no forma parte de la clave primaria)
- NF2 (not first normal form). Permite relaciones anidadas (un valor puede ser una relación), agrupar atributos y valores, compartir datos o relaciones, etc.
- eNF2 flexibiliza el modelo NF2 permitiendo la combinación libre de constructos (conjunto, tupla, listas, bolsas y matrices) y admitiendo tipos de datos parametrizados.
Limitaciones del modelo relacional
La restricción del universo de posibles elementos a tablas (bidimensionales) es una gran limitación conceptual a priori. Además el término “relación” no es muy adecuado, pues es demasiado genérico como para aplicarlo a tablas, que son estructuras de datos específicas.
Y como tablas también hay limitaciones:
- No es posible seleccionar las columnas de cierto tipo (numéricas, por ejemplo) o las columnas correspondientes a atributos cuyos nombres empiecen por “a”, etc.
- No es posible compartir elementos (datos, atributos, etc.) entre relaciones diferentes.
- Los atributos no pueden agruparse ni formar jerarquías.
- No se soportan objetos jerárquicos. La única forma es utilizar uniones naturales.
Respecto al SQL, el lenguaje estándar de acceso a bases de datos relacionales, hay varios inconvenientes importantes:
- Existen muchos dialectos SQL. El SQL estándar es la versión oficial aprobada por ANSI, pero no define de forma precisa un sólo lenguaje. Existen diferentes versiones de SQL que son compatibles ANSI.
- El estándar ANSI no define una versión interactiva de SQL. Los comandos SQL se embeben normalmente en programas escritos en 4GL. El propio SQL es considerado un 4GL.
- SQL no es un lenguaje completo de desarrollo de aplicaciones. Sólo está orientado a la gestión de tablas de datos, no permitiendo establecer condiciones, realizar bucles, etc., es decir, la programación normal, por lo que se produce un problema de acoplamiento (impedance mismatch) entre el lenguaje y el SQL, por no tener un fundamento semántico común.
No obstante, SQL3 es el nombre de un comité de normalización que renovó en profundidad el lenguaje SQL-92). Incluye soporte para la administración de bases de datos orientados a objetos, eliminando la distinción entre los lenguajes de programación y los lenguajes de gestión de base de datos, eliminando así ese problema de acoplamiento.
Especificación en MENTAL
Relación como conjunto de conjuntos
Una relación R
se puede especificar como un conjunto de filas, donde cada fila es a su vez un conjunto de atributos. Por ejemplo, la tabla Empleados se puede especificar así:
( R = {
{E001/Empleado Juan/Nombre Pérez/Apellido1
Gómez/Apellido2 Madrid/Ciudad}
{E002/Empleado Luis/Nombre Fernández/Apellido1
Pin/Apellido2 Barcelona/Ciudad}
{E003/Empleado Pedro/Nombre Ruiz/Apellido1
Llamas/Apellido2 Valencia/Ciudad}
{E004/Empleado Ramón/Nombre Ruiz/Apellido1
Rodríguez/Apellido2 Alicante/Ciudad}
} )
En general,
( R = { {v11/A1 ... v1m/Am} ... {vn1/A1 ... vnm/Am} } )
en donde vij
es el valor de la entidad de orden i
y atributo de orden j
, y Aj
el nombre del atributo de orden j
.
La cardinalidad de R
es R# = n
(número de filas), y su grado es A# = m
, siendo A
el conjunto de los nombres de los atributos: (A = {A1…Am})
.
Relación como función extensiva
Una relación R
(tabla bidimensional) se puede considerar un conjunto de relaciones básicas o elementales formadas por 3 elementos: la clave c
(el identificador de una entidad), un atributo a
de esa entidad y un valor v
de ese atributo. Esta relación se expresa como una función extensiva de dos parámetros (c
y a
) y de resultado v
:
Por ejemplo, en la relación Empleados, la primera tupla se puede codificar como conjunto así:
{ ( Empleados(E001 Nombre) = Juan )
( Empleados(E001 Apellido1) = Pérez )
( Empleados(E001 Apellido2) = Gómez)
( Empleados(E001 Ciudad) = Madrid) }
Para no tener que repetir los nombres de los atributos en cada tupla, podemos especificar :
( A = [Nombre Apellido1 Apellido2 Ciudad] )
{ [( Empleados(E001 A) = [Juan Pérez Gómez Madrid] )]
[( Empleados(E002 A) = [Luis Fernández Pin Barcelona] )]
[( Empleados(E003 A) = [Pedro Ruiz Llamas Valencia] )]
[( Empleados(E004 A) = [Ramón Ruiz Rodríguez Sevilla] )] }
En general, { [( R(c A) = [⌊valores de los atributos⌋ )]
siendo c
la clave de la entidad correspondiente, ( A = [A1…Am] )
y A1…Am
los nombres de los atributos.
Las cinco operaciones básicas del modelo relacional
- Unión de dos relaciones
R1
y R2
: R1∪R2
(unión de conjuntos).
R1
y R2
deben estar definidas como conjuntos de conjuntos.
- Diferencia de dos relaciones
R1
y R2
: (R1 ∪' R2)
(diferencia entre conjuntos).
R1
y R2
deben estar definidas también como conjuntos de conjuntos.
- Producto cartesiano de las relaciones
R1
y R2
.
〈( R1×R2 = {[ [R1↓]∪[R2↓] ]} )〉
R1
y R2
deben estar definidas también como conjuntos de conjuntos.
El grado resultante es (A1# + A2#)
. Y su cardinalidad es (R1#)*(R2#)
.
A1
y A2
son los conjuntos de atributos de R1
y R2
, respectivamente.
- Proyección de la relación
R
respecto al subconjunto de atributos B⊂A
, siendo A
el conjunto de los nombres de los atributos de R
.
Si definimos la relación R
como función extensiva, la expresión es:
〈( Proy(R c B) = {〈([R(c [B↓]])] )〉
o bien
〈( Proy(R c B) = {〈(R(c x) ← x∈B))〉} )〉
Ejemplo:
(R = Empleados)
(A = {Empleado Nombre Apellido1 Apellido2 Ciudad})
(B = {Ciudad})
Proy(Empleados B) // ev. { (Madrid Barcelona Valencia Sevilla) }
(B = {Nombre Apellido1})
Proy(Empleados B) // ev. { (Juan Luis Pedro Ramón)
(Pérez Fernández Ruiz Ruiz) }
- Selección de tuplas de
R
mediante un criterio de selección s
.
La relación R
debe estar definida como conjunto de conjuntos.
〈( Selec(R s) = R⇓s )〉
Por ejemplo,
Selec(Empleados E001/Empleado) // ev. {E001/Empleado Juan/Nombre Pérez/Apellido1 Gómez/Apellido2}
Selec(Empleados Ruiz/Apellido1) // ev.
{ {E003/Empleado Pedro/Nombre Ruiz/Apellido1
Llamas/Apellido2 Valencia/Ciudad}
{E004/Empleado Ramón/Nombre Ruiz/Apellido1
Rodríguez/Apellido2 Alicante/Ciudad} }
Las siete operaciones derivadas
- Intersección de dos relaciones
R1
y R2
: R1∩R2
(intersección de conjuntos).
R1
y R2
deben estar definidas como conjuntos de conjuntos.
- Unión natural de dos relaciones
R1
y R2
.
〈( UnionNat(R1 R2) = {[([R1↓] ∪ [R2↓]) ← (R1∈R2)]} )〉
R1
y R2
deben estar definidas como conjuntos de conjuntos.
Automáticamente se eliminan los atributos-valores duplicados.
- Unión exterior (Outer Join).
〈( (R1 ]×| R2) = {[([R1↓] ∪ [R2↓]) ← (R1∈R2) →' θ)]} )〉
〈( (R1 |×[ R2) = (R2 ]×| R1) )〉
〈( (R1 ]×[ R2) = ((R1 ]×| R2) ∪ (R1 |×[ R2)) )〉
- División de dos relaciones
R1
y R2
.
(C = A(R2)) // conjunto de atributos de R2
(X1 = Proy(R C))
(X2 = Proy((R2×X1 − R1) C))
(R1¸R2 = (X1 − X2))
- Asignación.
Se realiza mediante una expresión de sustitución, inmediata, diferida o inicial:
( nombre = expresión ) // sustitución inmediata
( nombre =: expresión ) // sustitución diferida
( nombre := expresión ) // sustitución inicial
- Renombrar.
Es equivalente a la anterior.
- Actualización.
Permite actualizar un valor de una tupla (R(c a) = v)
.
Bases de datos multidimensionales
En MENTAL, la generalización de las tablas (bidimensionales) a relaciones multidimensionales es muy simple, pues basta con considerar funciones de más de dos argumentos. La expresión general es
siendo c1 … cn
las claves asociadas a cada dimensión.
Por ejemplo, en el caso de la relación 3D de ventas de productos, la relación definida como función se compone de un conjunto de términos de la forma
( Ventas(producto zona año) = cantidad )
Abreviadamente,
OLAP
La flexibilidad de MENTAL permite realizar procesos de análisis de bases de datos de una manera sencilla e intuitiva.
Ejemplos para la relación 3D de ventas de productos:
- Total de productos vendidos en España del producto P001 en el año 2014:
+⊣{〈( V(p z a) ← (p=P001 ∧ z=España ∧ a=2014) )〉)}
- Productos que se han vendido en España en 2014 más de 5 unidades:
(〈 (p ← (V(p z a) > 5)∧(z=España)∧(a=2014) 〉)
- Producto más vendido en España en los años 2000 a 2014 (puede haber varios productos con la misma cantidad de ventas):
〈 (Vmax(a) := 0) 〉 // valor inicial del nro. de productos vendidos en el año
〈( (V(p z a) > Vmax(a)) → (Vmax(a) = V(p z a)) ) 〉)
(〈 Pmax(a) = {〈p ← V(p z a) = Vmax(a) 〉) // productos más vendidos en el año
(años = [2000…2014])
[(años Pmax(años))]
Ventajas de MENTAL como Sistema de Gestión de Base de Datos Relacional (SGBDR)
MENTAL es un lenguaje válido para expresar relaciones (tablas bidimensionales) y realizar las operaciones (básicas y derivadas) del modelo relacional. Además, con MENTAL se pueden superar las limitaciones del modelo relacional, al aportar generalidad y flexibilidad para relajar las restricciones impuestas por este paradigma: soportar objetos jerárquicos, compartir expresiones, interrelacionar expresiones, realizar selecciones avanzadas (por tipos, por niveles jerárquicos, etc.), agrupar atributos, etc.
- MENTAL es un lenguaje universal simple y compacto para la gestión de las bases de datos relacionales. Con MENTAL, el paradigma relacional se simplifica y permite utilizar un único lenguaje para todo tipo de operaciones: para definir relaciones, para seleccionar tuplas, para modificar tablas, etc.
MENTAL permite combinar el paradigma relacional con otros paradigmas de programación.
- MENTAL también podría usarse para definir otros modelos de gestión de bases de datos (orientada a objetos, multidimensional, etc.).
- MENTAL permite utilizar valores difusos (de variables lingüísticas) como frío, caliente, rápido, lento, alto, bajo, etc., afectado por un factor entre 0 y 1. En este sentido, se pueden realizar consultas difusas.
Existe una versión de SQL llamada FSQL (Fuzzy SQL), pero MENTAL posee la capacidad de manejar valores difusos, sin necesidad de utilizar un lenguaje específico.
- MENTAL permite activar/desactivar triggers, modificar triggers (triggers dinámicos), triggers parametrizados, triggers de orden superior (triggers de triggers). Se implementan mediante expresiones genéricas. Permiten detectar eventos antes y después de cada operación. Permite realizar cualquier tipo de operación (cálculos derivados, establecer restricciones, etc.), y no solo operaciones de actualización de la base de datos.
- No se necesita el valor Null para especificar que un valor de una tabla no existe o no se conoce. Simplemente, la relación no existe.
- MENTAL solo hace referencia a la parte conceptual. No hace referencia a los problemas de implementación.
- No se necesita el álgebra relacional. No es estrictamente necesario definir operaciones especiales como unión natural, unión exterior, etc. Las relaciones entre diferentes tablas se pueden realizar directamente mediante el lenguaje.
- Se pueden especificar magnitudes (cantidades y unidades, como 230*€ o 120*Kgr).
- Se puede utilizar para realizar procesos de análisis de la base de datos (OLAP).
Adenda
Breve historia del modelo relacional
El modelo relacional de base de datos nació en Junio de 1970, cuando Edgar Frank Codd (cuando trabajaba en IBM) publica un artículo titulado “A Relational Model of Data for Large Shared Data Banks” en la revista Communications of the ACM, que aportó una nueva visión de los datos como tablas bidimensionales, acompañado de un sólido fundamento teórico: el álgebra relacional.
El modelo relacional es considerado uno de los grandes logros técnicos del siglo XX. Codd formalizó un campo que hasta entonces era una colección desestructurada de productos y técnicas ad hoc y la convirtió en una disciplina científica teórica con aplicación práctica. Se puede decir que todos los SGBDs están basados en las ideas de Codd. Codd es considerado el padre de las bases de datos relacionales.
Posteriormente, Codd presentó otro lenguaje basado en la lógica de predicados de primer orden, mostrando que era equivalente en poder expresivo al álgebra relacional. A este segundo lenguaje lo denominó “cálculo relacional”, un lenguaje no procedural (especifica el “qué”, no el “cómo”). En cambio, el álgebra relacional es un lenguaje procedural, pues el cálculo de una nueva relación se hace especificando las operaciones a realizar y el orden en que deben hacerse.
Otros eventos destacados fueron:
- En 1976, Peter Cheng introduce un modelo más conceptual que el de Codd: el modelo entidad-relación.
- En Junio de 1976 aparece el primer SGBD comercial: Multics Relational Data Store (MRDS), de Honeywell Information Systems. Multics fue uno de los primeros sistemas operativos de tiempo compartido.
- En Julio de ese mismo año aparece Oracle 2.0. Al día de hoy, Oracle es uno de los productos más utilizados a nivel empresarial.
- En 1977, basándose en las ideas de Codd, IBM presenta System R, un sistema de gestión de bases de datos relacionales que incluía el lenguaje SEQUEL (Structured English Query Language).
- En 1979 aparece el programa dBase para ordenadores personales, desarrollado por Wayne Ratliff en el Jet Propulsion Laboratory de la NSA. dBase se convirtió rápidamente en el software de base de datos más popular en los años 1980s. Era a la vez un SGBD y un lenguaje de programación, y era abierto. El hecho de ser abierto condujo a otras versiones como Clipper y FoxPro.
- En 1983, IBM introduce el sistema DB2, que incluía la primera versión de SQL, el lenguaje de interrogación de bases de datos, que era una versión mejorada de SEQUEL.
- En 1985, Codd, en un artículo de Computer World presenta 12 reglas que debía cumplir una base de datos para ser considerado verdaderamente relacional.
- En 1986, ANSI estandariza el lenguaje SQL, dando lugar a la primera versión de SQL (SQL1 o SQL-86). En 1987 fue aceptado por la ISO.
- En 1989 Microsoft presenta SQL Server, que no se consolidó hasta la versión 4.2, con la aparición de Windows. Este producto dominó el mercado cliente/servidor en los años 1990’s.
- En 1992, ANSI e ISO presentan SQL2 (o SQL-92).
- En 1993, Codd acuña el término “OLAP” y presenta “las 12 leyes de procesamiento analítico online”.
- En 2000 aparece MySQL, un SGBDR de código abierto (open source). Pronto se convirtió en el SGBD relacional estándar para pequeñas y medianas empresas. MySQL se asocia más con la base de datos de las aplicaciones web. MySQL fue desarrollado originalmente por la compañía sueca MySQL. Posteriormente fue adquirido por Oracle. Los desarrolladores pueden usar MySQL bajo Licencia Pública General de GNU (GPL), pero las empresas deben obtener una licencia comercial de Oracle.
- Actualmente, SQL es el estándar de la mayoría de los SGBDR´s comerciales. La última versión es SQL-2008.
La generalización del modelo relacional
Ha habido varios intentos de resolver estos problemas, introduciendo cierta generalidad y flexibilidad en el modelo relacional, relajando las restricciones impuestas por la 1NF. Actualmente se tiende a la NF2 (not first normal form), en la que se permite agrupar atributos y valores, compartir datos o relaciones, etc.
He aquí algunos de los llamados modelos post-relacionales:
- Un álgebra que permite que los atributos sean conjuntos de objetos atómicos [Jaeschke, 1982].
- Un álgebra que soporta tuplas (tipo atributo-valor) anidadas [Zaniolo, 1985].
- Un modelo en el que los atributos pueden ser relaciones, las cuales pueden tener atributos con valores [Scheck, 1986].
- Un modelo más general aún en el que los valores de los atributos pueden ser átomos, tuplas, conjuntos de átomos, conjuntos de tuplas o conjuntos de conjuntos [Bancilhon, 1986].
- Un modelo relacional en el que se comparten objetos complejos [Atkinson, 1978].
- Un modelo formal de base de datos orientados a objetos que preconiza la "identidad de objetos", que permite distinguirlos independientemente de su contenido, posición o direccionamiento. Además pueden ser compartidos [Khoshafian, 1986].
- Un modelo relacional anidado en el que el valor de un atributo puede ser, a su vez, una relación [Makinouchi, 1977] [Jaeschke, 1982].
- El propio Codd ha sugerido extensiones al modelo para contemplar más semántica [Codd, 1979].
Bibliografía
- Abitebond, S.; Hull, R.; Vianu, V. Foundations of Databases. Addison-Wesley, 1995. (Incluye el concepto de BD computacionalmente completa).
- Atkinson, M.P. Programming languages and data-bases. Proc. VLDB, 1978.
- Bancilhon, F.; Khoshafian, S. A calculus for complex objects. ACM Int. Symp. PODS, 1986.
- Codd, E.F. A Relational Model for Large Shared Data Banks. Communications of the ACM, vol. 13, no. 6, pp. 377-387, Junio 1970.
- Codd, E.F. Relational Completeness of Data Base Sublanguages. En [Rustin, 1972], pp. 33-64, 1972.
- Codd, E.F. Extending the Database Relational Model to Capture More Meaning. ACM Transactions on Database Systems, vol. 4, no. 4, pp. 397-434, Dic. 1979.
- Codd, E.F. Further Normalization of the Data Base Relational Model. En [Rustin, 1972], pp. 33-64, 1972.
- Codd, E.F. The 1981 ACM Turing Award Lecture. Relational Database: A Practical Foundation for Productivity. Communications of the ACM, 25 (2): 109-117, Feb. 1982.
- Codd, E.F. The Relational Model for Database Management: versión 2. Addison-Wesley, 1990.
- Date, Chris J. Introducción a los sistemas de bases de datos. Pearson Educación, 2001.
- Date, Chris J. What First Normal Form Really Means. Internet.
- Elsmari, Ramez A.; Navathe, Shamkant, B. Fundamentos de Sistemas de Bases de datos. Addison-Wesley, 2002.
- García-Molina, Hector; Ullman, Jeff; Widom, Jeniffer. Database Systems: the complete book. Prentice-Hall, 2008.
- Jaeschke, G.; Schek, H.J. Remarks on the Algebra of Non First Normal Form Relations. Proceedings of the ACM SIGACT-SIGMOS Symposium on Principles of Database Systems, 1982, pp. 124-138.
- Khoshafian, S; Copeland, G. Object Identity. Proc. OOSPLA, Portland, OR, USA, 1986.
- Korth, Henry F.; Silberschatz, Abraham. Fundamentos de Bases de datos. McGraw-Hill, 2002.
- López-Sebastián Sanz, Julio; Álvarez Real, José. Sistemas de bases de datos. Relacionales, Jeráruicas, Red. Mases/ediciones, 1987.
- Maine, Alan; Wood, Richard. Introducción a las Bases de datos Relacionales. Díaz de Santos, 1988.
- Makinouchi, A. A Consideration of Normal Form on Not-necessarily Normalized Relations in the Relational Data Model. Proceedings of the International Conference on Very Large Data Bases, 1977, pp. 447-453.
- Planche, R. Dominio de la Modelización Conceptual. Masson, 1992.
- Rustin, R. (ed.). Data Base Systems. Prentice-Hall, 1072.
- Scheck, H; Scholl, M. The relational model with relation valued attributes. Info. Syst. vol. 11, no. 2, 1986.
- Zaniolo, C. The representation and deductive retrieval of complex objects. Conf. VLDB, 1985.